package com.gitee.candy.string;

import net.sourceforge.pinyin4j.PinyinHelper;

/**
 * @author ：suyanlong
 * @date ：Created in 2020/6/30 14:18
 * @description： 汉子转拼音
 * @version: V1.0
 * ###################################
 * 1.获取汉字首字母的方法
 * 2.获取汉字拼音的方法
 * ###################################
 */
public class PinYinUtils {

    public static void main(String[] args) {
        System.out.println(getHanziPinYin("黄万超/HUANGWAN CHAO"));
        System.out.println(getHanziPinYin("suyanlong"));
        System.out.println(getHanziInitials("苏彦强"));
        System.out.println(getHanziInitials("suyanlong"));
    }

    /**
     * 获取汉字首字母的方法。如： 张三 --> ZS
     * 说明：暂时解决不了多音字的问题，只能使用取多音字的第一个音的方案
     *
     * @param hanzi 汉子字符串
     * @return 大写汉子首字母; 如果都转换失败,那么返回null
     */
    public static String getHanziInitials(String hanzi) {

        String result = null;
        if (null != hanzi && !"".equals(hanzi)) {
            char[] charArray = hanzi.toCharArray();
            StringBuffer sb = new StringBuffer();
            for (char ch : charArray) {
                if (Character.toString(ch).matches("[\\u4E00-\\u9FA5]+")) {
                    // 逐个汉字进行转换， 每个汉字返回值为一个String数组（因为有多音字）
                    String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
                    if (null != stringArray) {
                        sb.append(stringArray[0].charAt(0));
                    }
                } else {
                    sb.append(ch);
                }
            }
            if (sb.length() > 0) {
                result = sb.toString().toUpperCase();
            }
        }
        return result;
    }

    /**
     * 获取汉字拼音的方法。如： 张三 --> zhangsan
     * 说明：暂时解决不了多音字的问题，只能使用取多音字的第一个音的方案
     *
     * @param hanzi 汉子字符串
     * @return 汉字拼音; 如果都转换失败,那么返回null
     * 43
     */
    public static String getHanziPinYin(String hanzi) {
        String result = null;
        if (null != hanzi && !"".equals(hanzi)) {
            char[] charArray = hanzi.toCharArray();
            StringBuffer sb = new StringBuffer();
            for (char ch : charArray) {
                if (Character.toString(ch).matches("[\\u4E00-\\u9FA5]+")) {
                    // 逐个汉字进行转换， 每个汉字返回值为一个String数组（因为有多音字）
                    String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
                    if (null != stringArray) {
                        // 把第几声这个数字给去掉
                        sb.append(stringArray[0].replaceAll("\\d", ""));
                    }
                } else {
                    sb.append(ch);
                }
            }
            if (sb.length() > 0) {
                result = sb.toString();
            }
        }
        return result;
    }
}
